home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / BasicMenuBarUI.java < prev    next >
Text File  |  1998-06-30  |  6KB  |  184 lines

  1. /*
  2.  * @(#)BasicMenuBarUI.java    1.55 98/02/16
  3.  *
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20.  
  21. package com.sun.java.swing.plaf.basic;
  22.  
  23. import com.sun.java.swing.*;
  24. import com.sun.java.swing.event.*;
  25. import java.awt.Color;
  26. import java.awt.Component;
  27. import java.awt.Container;
  28. import java.awt.Dimension;
  29. import java.awt.Graphics;
  30. import java.awt.Insets;
  31. import java.awt.Point;
  32. import java.awt.Rectangle;
  33. import java.awt.event.*;
  34. import java.io.Serializable;
  35.  
  36. import com.sun.java.swing.border.*;
  37. import com.sun.java.swing.plaf.*;
  38.  
  39.  
  40. /**
  41.  * A Windows L&F implementation of MenuBarUI.  This implementation 
  42.  * is a "combined" view/controller.
  43.  * <p>
  44.  * Warning: serialized objects of this class will not be compatible with
  45.  * future swing releases.  The current serialization support is appropriate 
  46.  * for short term storage or RMI between Swing1.0 applications.  It will
  47.  * not be possible to load serialized Swing1.0 objects with future releases
  48.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  49.  * baseline for the serialized form of Swing objects.
  50.  *
  51.  * @version 1.55 02/16/98
  52.  * @author Georges Saab
  53.  * @author David Karlton
  54.  * @author Arnaud Weber
  55.  */
  56. public class BasicMenuBarUI extends MenuBarUI implements Serializable {
  57.     protected JMenuBar              menuBar;
  58.     protected MouseListener         mouseListener;
  59.     protected MouseMotionListener   dragListener;
  60.     protected ChangeListener        menuChangeListener;
  61.  
  62.     public static ComponentUI createUI(JComponent x) {
  63.     return new BasicMenuBarUI();
  64.     }
  65.  
  66.     public void installUI(JComponent c) {
  67.     menuBar = (JMenuBar) c;
  68.     initListeners();
  69.     addListeners();
  70.     // Set defaults
  71.     c.setOpaque(true);
  72.     LookAndFeel.installBorder(c,"MenuBar.border");    
  73.     LookAndFeel.installColorsAndFont(c,
  74.                           "MenuBar.background",
  75.                           "MenuBar.foreground",
  76.                           "MenuBar.font");
  77.     }
  78.  
  79.     public void uninstallUI(JComponent c) {
  80.     removeListeners();
  81.     c.resetKeyboardActions();
  82.     LookAndFeel.uninstallBorder(c);
  83.  
  84.     }
  85.  
  86.     protected void initListeners() {
  87.         mouseListener = createMouseListener();
  88.         dragListener  = createMouseMotionListener();
  89.         menuChangeListener = createChangeListener();
  90.     }
  91.  
  92.     protected MouseListener createMouseListener() {
  93.         return new MouseListener(menuBar);
  94.     }
  95.  
  96.     protected MouseMotionListener createMouseMotionListener() {
  97.         return new BasicMenuMouseMotionListener();
  98.     }
  99.  
  100.     protected ChangeListener createChangeListener() {
  101.         return new BasicMenuBarChangeListener() {
  102.             public void stateChanged(ChangeEvent e) {
  103.                 int i,c;
  104.                 for(i=0,c = menuBar.getMenuCount() ; i < c ; i++) {
  105.             JMenu menu = menuBar.getMenu(i);
  106.                     if(menu !=null && menu.isSelected()) {
  107.                         menuBar.getSelectionModel().setSelectedIndex(i);
  108.                         break;
  109.                     }
  110.                 }
  111.             }
  112.         };
  113.     }
  114.  
  115.     private abstract static class BasicMenuBarChangeListener implements
  116.         ChangeListener, Serializable {
  117.         // This class exists so the above anonymous class is
  118.         // Serializable.
  119.     }
  120.  
  121.     protected void addListeners() {
  122.         for (int i = 0; i < menuBar.getMenuCount(); i++) {        
  123.             registerMenu(menuBar.getMenu(i));
  124.         }
  125.     }
  126.  
  127.     protected void removeListeners() {
  128.         for (int i = 0; i < menuBar.getMenuCount(); i++) { 
  129.         unregisterMenu(menuBar.getMenu(i));
  130.         }        
  131.     }
  132.  
  133.     /** Adds this MenuBarUI's listeners 
  134.       */
  135.     public void registerMenu(JMenu menu) {
  136.         menu.getModel().addChangeListener(menuChangeListener);
  137.     }
  138.  
  139.     /** Removes this MenuBarUI's listeners
  140.       */
  141.     public void unregisterMenu(JMenu menu) {
  142.         menu.getModel().removeChangeListener(menuChangeListener);
  143.     }
  144.  
  145.     public Dimension getPreferredSize(JComponent c) { 
  146.         return null; 
  147.     }
  148.  
  149.     public Dimension getMinimumSize(JComponent c) { 
  150.         return null; 
  151.     } 
  152.  
  153.     public Dimension getMaximumSize(JComponent c) { 
  154.         return null; 
  155.     }
  156.  
  157.     static class MouseListener extends MouseAdapter implements Serializable {
  158.         JMenuBar menuBar;
  159.         public MouseListener(JMenuBar mb) {
  160.             menuBar = mb;
  161.         }
  162.  
  163.         public void mousePressed(MouseEvent e) {
  164.             MenuElement me[] = new MenuElement[1];
  165.             me[0]=menuBar;
  166.             MenuSelectionManager.defaultManager().setSelectedPath(me);
  167.             MenuSelectionManager.defaultManager().processMouseEvent(e);
  168.         }
  169.         public void mouseReleased(MouseEvent e) {
  170.             MenuSelectionManager.defaultManager().processMouseEvent(e);
  171.         }
  172.         public void mouseEntered(MouseEvent e) {
  173.             MenuSelectionManager.defaultManager().processMouseEvent(e);
  174.         }
  175.         public void mouseExited(MouseEvent e) {
  176.             MenuSelectionManager.defaultManager().processMouseEvent(e);
  177.         }
  178.     }
  179.  
  180.  
  181. }
  182.  
  183.  
  184.